/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package mumaker;

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

import javax.swing.JColorChooser;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
import mumaker.spots.GestGrahSpot;
import mumaker.spots.GestMapa;
import mumaker.spots.GestMob;
import mumaker.spots.GestSpots;
import mumaker.spots.GraphSpots;
import mumaker.spots.Mapa;
import mumaker.spots.Mob;
import mumaker.spots.Spots;

/**
 *
 * @author Javs
 */
public class Util {

    public static void devolverMapas(String ruta) throws IOException {
        File f = new File(ruta);
        BufferedReader entrada = null;
        try {
            entrada = new BufferedReader(new FileReader(f));
            String linea;
            while (entrada.ready()) {
                linea = entrada.readLine();
                //se verifica que la linea contenga por lo menos algun caracter.
                if (linea.length() != 0) {
                    //se verifica que la linea no comienze con los caracteres especiales de comentarios. "//"
                    if (!"//".equals(linea.substring(0, 2))) {
                        //transoformamos la linea leida en un array de strings, gracias al delimitador |.
                        try {
                            String[] a = linea.split("\\|");

                            GestMapa.getInstance().cargarNuevoMapa(Integer.valueOf(a[0]), a[1], f.getCanonicalPath().replace(f.getName(), "") + a[2]);
                            //  System.out.println(f.getCanonicalPath().replace(f.getName(),"")+a[2]);

                            //capturamos la excepcion en caso de que el usaurio tenga un archivo de origen con mal formato  (falta una columna)  
                        } catch (ArrayIndexOutOfBoundsException a) {
                            JOptionPane.showMessageDialog(null, "El archivo de origen no posee un formato correcto "
                                    + "\nRecuerde agregar las 3 columnas correspondientes "
                                    + "separadas \n"
                                    + "separadas por el caracter '|' \n\n"
                                    + "Error obteniendo linea  -->  " + linea + "\n\n"
                                    + "Detalle de error : " + a.toString(), "Error al leer el archivo de origen.", JOptionPane.ERROR_MESSAGE);
                            GestMapa.getInstance().limiarColeccion();
                            entrada.close();
                            break;
                            //capturamos la excepcion en caso de que el usaurio tenga un archivo de origen con mal formato (en lugar de un numero hay un string en la primer fila)
                        } catch (NumberFormatException n) {
                            JOptionPane.showMessageDialog(null, "El archivo de origen no posee un formato correcto "
                                    + "\nRecuerde asignar el tipo de dato necesario, "
                                    + "\n\n"
                                    + "Error obteniendo linea  -->  " + linea + "\n\n"
                                    + "Detalle de error : " + n.toString(), "Error al leer el archivo de origen.", JOptionPane.ERROR_MESSAGE);
                            GestMapa.getInstance().limiarColeccion();
                            entrada.close();
                            break;
                        }
                    }
                }
            }
            entrada.close();
        } catch (IOException e) {
            GestMapa.getInstance().limiarColeccion();
            entrada.close();

        }

    }

    public static String devolverSpotsTxt(String ruta) throws IOException, StringIndexOutOfBoundsException {

        File f = new File(ruta);
        FileReader fr = new FileReader(f);
        BufferedReader br = new BufferedReader(fr);

        try {
            while (br.ready()) {
                StringBuilder linea = new StringBuilder(br.readLine());
                if (linea.length() != 0) {
                    if (!"//".equals(linea.substring(0, 2))) {
                        String nroMob = (String) linea.subSequence(0, linea.indexOf("\t"));
                        String nombreMob = (String) linea.subSequence(linea.indexOf("\""), linea.lastIndexOf("\"") + 1);
                        GestMob.getInstance().cargarNuevoMob(Integer.parseInt(nroMob), nombreMob);
                    }
                }
            }
            br.close();
            return "";
        } catch (StringIndexOutOfBoundsException e) {
            return "";
        }
    }

    public static DefaultTableModel listarSpots(DefaultTableModel jtableModel) {


        jtableModel.setRowCount(0);
        for (Spots objS : GestSpots.getInstance().devolverSpots()) {
            Object row[] = {objS.getMobs().getNumero(),
                objS.getMapa(),
                objS.getX(),
                objS.getY(),
                objS.getX2(),
                objS.getY2(),
                objS.getDir(),
                objS.getRadio(),
                objS.getCantidad(),
                //Ultima columna comentario txt (Nombre mob)
                objS.getMobs().getNombre()};
            jtableModel.addRow(row);
        }



        return jtableModel;
    }

    public static DefaultTableModel listarMobs(DefaultTableModel jtableModel) {

        jtableModel.setRowCount(0);
        for (Mob objM : GestMob.getInstance().retornarMob()) {

            String row[] = {String.valueOf(objM.getNumero()), objM.getNombre()};
            jtableModel.addRow(row);
        }
        return jtableModel;
    }

    public static void exportarTXT(String path) throws IOException {
        boolean aux = true;
        int nroLin = 0;
        File fichero = new File(path);
        if (!fichero.exists()) {
                       BufferedWriter bw = new BufferedWriter(new FileWriter(path));
            for (Mapa objM : GestMapa.getInstance().retornarMapas()) {

                for (Spots objS : GestSpots.getInstance().devolverSpots()) {

                    if (objS.getMapa() == objM.getNro()) {
                        if (aux) {
                           
                            bw.write("//======================== SPOTS/MOBS " + objM.getNombre() + " ========================" + "\r\n");
                            bw.write("//Spot/Mobs Agregados con MuMaker-SpotMaker(jpra110)" + "\r\n");
                            bw.write("//Mob" + "\t" + "Map" + "\t\t" + "Radio" + "\t" + "CordX" + "\t" + "CordY" + "\t" + "CordX2" + "\t" + "CordY2" + "\t" + "Dir" + "\t\t" + "Quant" + "\t" + "Name" + "\r\n" + "\r\n");
                            nroLin += 3;
                            aux = false;
                        }

                        //Mob	Map	Radio	CordX	CordY	CordX2	CordY2	Dir 	Quant  Name
                        bw.write(objS.getMobs().getNumero() + "\t\t" + objS.getMapa() + "\t\t" + objS.getRadio() + "\t\t" + objS.getX() + "\t\t" + objS.getY() + "\t\t" + objS.getX2() + "\t\t" + objS.getY2() + "\t\t" + objS.getDir() + "\t\t" + objS.getCantidad() + "\t\t" + "//" + objS.getMobs().getNombre() + "\r\n");
                        ++nroLin;
                    }

                }
              
                aux = true;
            }
            bw.close();
            JOptionPane.showMessageDialog(null, "Se han escrito : " + nroLin + " lineas en el archivo en \nen el archivo " + fichero.getName(), "Operacion realizada con exito!", JOptionPane.INFORMATION_MESSAGE);

        } else {
            BufferedWriter bw = new BufferedWriter(new FileWriter(path));
            for (Mapa objM : GestMapa.getInstance().retornarMapas()) {

                for (Spots objS : GestSpots.getInstance().devolverSpots()) {

                    if (objS.getMapa() == objM.getNro()) {
                        if (aux) {
                           
                            bw.write("//======================== SPOTS/MOBS " + objM.getNombre() + " ========================" + "\r\n");
                            bw.write("//Spot/Mobs Agregados con MuMaker-SpotMaker(jpra110)" + "\r\n");
                            bw.write("//Mob" + "\t" + "Map" + "\t\t" + "Radio" + "\t" + "CordX" + "\t" + "CordY" + "\t" + "CordX2" + "\t" + "CordY2" + "\t" + "Dir" + "\t\t" + "Quant" + "\t" + "Name" + "\r\n" + "\r\n");
                            nroLin += 3;
                            aux = false;
                        }

                        //Mob	Map	Radio	CordX	CordY	CordX2	CordY2	Dir 	Quant  Name
                        bw.write(objS.getMobs().getNumero() + "\t\t" + objS.getMapa() + "\t\t" + objS.getRadio() + "\t\t" + objS.getX() + "\t\t" + objS.getY() + "\t\t" + objS.getX2() + "\t\t" + objS.getY2() + "\t\t" + objS.getDir() + "\t\t" + objS.getCantidad() + "\t\t" + "//" + objS.getMobs().getNombre() + "\r\n");
                        ++nroLin;
                    }

                }
              
                aux = true;
            }
            bw.close();
            JOptionPane.showMessageDialog(null, "Se han escrito : " + nroLin + " lineas en el archivo en \nen el archivo " + fichero.getName(), "Operacion realizada con exito!", JOptionPane.INFORMATION_MESSAGE);

        }
    }

    public static int radomizeXY(int i2, int limite) {
        return (int) Math.random() * (limite + i2) + (i2 - limite);
    }
/*
    public static void repintar(JComponent jc, int nroMapa) {

        for (GraphSpots gs : GestGrahSpot.getInstance().retornarGraphs()) {
            if (nroMapa == gs.getMap().getNro()) {
                Graphics g = ((JLabel) jc).getGraphics();
                g.setColor(gs.getColor());
                g.drawOval(gs.getX() - (gs.getRadio() / 2), gs.getY() - (gs.getRadio() / 2), gs.getRadio(), gs.getRadio());
                g.dispose();
            }
        }
    }
     * 
     */
}
